package entities

import (
	"database/sql/driver"
)

// ExampleStatus 示例状态枚举
type ExampleStatus string

const (
	ExampleStatusActive   ExampleStatus = "active"   // 激活状态
	ExampleStatusInactive ExampleStatus = "inactive" // 非激活状态
)

// Value 实现 driver.Valuer 接口，用于数据库存储
func (es ExampleStatus) Value() (driver.Value, error) {
	return string(es), nil
}

// Scan 实现 sql.Scanner 接口，用于数据库读取
func (es *ExampleStatus) Scan(value interface{}) error {
	if value == nil {
		*es = ExampleStatusActive
		return nil
	}
	if s, ok := value.(string); ok {
		*es = ExampleStatus(s)
	}
	return nil
}

// Example 示例实体 - 演示如何使用BaseEntity和GORM特性
type Example struct {
	BaseEntity
	Name        string        `gorm:"type:varchar(100);not null;index:idx_name" json:"name" comment:"示例名称"`
	Description string        `gorm:"type:text" json:"description" comment:"示例描述"`
	Status      ExampleStatus `gorm:"type:enum('active','inactive');default:'active'" json:"status" comment:"示例状态"`
	CreatedBy   uint          `gorm:"comment:创建人ID" json:"created_by" comment:"创建人ID"`
}

// TableName 指定表名
func (Example) TableName() string {
	return "examples"
}

// IsActive 检查是否为激活状态
func (e *Example) IsActive() bool {
	return e.Status == ExampleStatusActive
}
